package com.rs.util;

import com.rs.entity.basic.DeviceStatus;
import com.rs.entity.enums.VehicleStatus;
import com.rs.entity.task.Target;

import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 车辆工具类
 *
 * @author zhouwz
 * @date 2020/7/24 10:30
 */
public class VehicleUtil {

    /**
     * 实时状态
     */
    public static volatile Map<String, DeviceStatus> currentStatus = new ConcurrentHashMap<>();

    /**
     * 目标
     */
    public static volatile Map<String, Target> targetMap = new ConcurrentHashMap<>();

    /**
     * 获取全部设备状态
     *
     * @return 获取全部设备状态
     */
    public static Map<String, DeviceStatus> getCurrentStatus() {
        return currentStatus;
    }

    /**
     * 获取指定设备实时状态
     *
     * @param vehicleCode 车辆编号
     * @return 获取指定设备实时状态
     */
    public static DeviceStatus getCurrentStatus(String vehicleCode) {
        return getCurrentStatus().get(vehicleCode);
    }

    /**
     * 获取全部设备最终状态
     *
     * @return 获取全部设备最终状态
     */
    public static Map<String, Target> getTargetMap() {
        return targetMap;
    }

    /**
     * 设置车辆目标
     */
    public static void putTarget(Target target, String vehicleCode) {
        getTargetMap().put(vehicleCode, target);
    }

    /**
     * 删除车辆目标
     */
    public static void removeTarget(String vehicleCode) {
        getTargetMap().remove(vehicleCode);
    }

    /**
     * 新增对应车辆的设备状态,初始化时候赋值的
     *
     * @param deviceStatus 车辆状态
     */
    public static void putCurrent(DeviceStatus deviceStatus) {
        getCurrentStatus().put(deviceStatus.getDeviceNo(), deviceStatus);
    }

    /**
     * 当前所有车辆的设备状态
     *
     * @return 当前所有车辆的设备状态
     */
    public static Collection<DeviceStatus> values() {
        return getCurrentStatus().values();
    }

    /**
     * 根据车辆编号获取目标
     *
     * @param vehicleCode 车辆编号
     * @return 根据车辆编号获取目标
     */
    public static Target getTarget(String vehicleCode) {
        return getTargetMap().get(vehicleCode);
    }

    /**
     * 设置实时状态为空闲
     *
     * @param vehicleCode 车辆编号
     */
    public static void idle(String vehicleCode) {
        getCurrentStatus(vehicleCode).setStatus(VehicleStatus.IDLE.getCode());
    }
}
